// Package endpoint
// Author liuzhiyong
// Date 2023/11/25
// Description 测试端点 端点层
package endpoint

import (
	"context"
	"errors"
	"gitee.com/liu_zy_developer/go-kit-demo/service"
	"github.com/go-kit/kit/endpoint"
)

// MakeSumEndpoint service 的 Sum函数端点
func MakeSumEndpoint(srv service.AddService) endpoint.Endpoint {
	return func(ctx context.Context, request interface{}) (response interface{}, err error) {
		//req,ok := request.(SumRequest) // 断言判断类型, 避免运行时出现错误可以这么写
		req := request.(SumRequest)          // 断言判断类型, 并转换, 如果类型不一致会抛错
		v, err := srv.Sum(ctx, req.A, req.B) // 调用service层
		if err != nil {
			return SumResponse{V: v, Err: err.Error()}, nil // 返回错误
		}
		panic(errors.New("测试异常"))
		return SumResponse{V: v}, nil // 返回结果
	}
}

func MakeConcatEndpoint(srv service.AddService) endpoint.Endpoint {
	return func(ctx context.Context, request interface{}) (response interface{}, err error) {
		// 断言, 类型转换
		req := request.(ConcatRequest)
		v, err := srv.Concat(ctx, req.A, req.B)
		if err != nil {
			return ConcatResponse{V: v, Err: err.Error()}, nil
		}
		return ConcatResponse{V: v}, nil
	}
}

// SumRequest Sum方法的参数.
type SumRequest struct {
	A int `json:"a"`
	B int `json:"b"`
}

// SumResponse Sum方法的响应
type SumResponse struct {
	V   int    `json:"v"`
	Err string `json:"err,omitempty"` // omitempty 表示如果该字段为零值或者未空, 反序列化会忽略这个字段
}

// ConcatRequest Concat方法的参数.
type ConcatRequest struct {
	A string `json:"a"`
	B string `json:"b"`
}

// ConcatResponse  Concat方法的响应.
type ConcatResponse struct {
	V   string `json:"v"`
	Err string `json:"err,omitempty"`
}
